package com.hbnu.practices01;

import java.util.Scanner;

/**
 * 圆桌离开（约瑟夫环）
 *
 * @author kittychen
 * @date 2025-09-09 17:16
 */
public class Practice03 {

    public static void main(String[] args) {
        // 1、创建键盘输入对象
        Scanner scanner = new Scanner(System.in);

        // 2、定义变量，用于接收玩游戏的人数、第几个开始数、数到多少退出游戏
        System.out.println("请输入玩游戏的人数：");
        int n = scanner.nextInt();
        System.out.println("请输入从第几个开始数：");
        int k = scanner.nextInt();
        System.out.println("请输入数到多少退出游戏：");
        int m = scanner.nextInt();

        // 3、定义变量
        int[] person = new int[n];  // 存放玩家，数组元素值为0表示还在游戏中
        int[] seq = new int[n - 1];  // 存放淘汰出局的玩家的编号
        int index = 0;   // 用于记录每次开始报数者的编号

        // 4、开始猎杀游戏
        for (int i = 0; i < n - 1; i++) {   // 游戏轮数
            index = k;   // 每一轮开始报数者的编号
            // 5、开始报数
            for (int j = 0; j < m; index++) {   // 报数次数
                if (person[index % n] == 0) {   // 如果该玩家还在游戏中
                    j++;
                }
            }

            // 6、将退出游戏者的数组值改为1
            person[(index - 1) % n] = 1;

            // 7、将退出游戏者的编号存入seq数组
            if ((index - 1) % n != 0) {
                seq[i] = (index - 1) % n;
            } else {
                seq[i] = index - 1;
            }

            // 8、更新下一次开始报数的编号
            k = index % n;
        }

        // 9、输出退出游戏者的编号
        System.out.println("退出游戏者的编号为：");
        for (int i = 0; i < seq.length; i++) {
            if (i == seq.length - 1) {
                System.out.println(seq[i]);
                break;
            }
            System.out.print(seq[i] + "\t");
        }
    }
}
